﻿import tkinter as tk
# 正则
import re


doc = '《道德经》——作者（老子）：“道可道，非常道；名可名，非常名。”  “无名，天地之始，有名，万物之母……”'
   
def words():
    global doc
    text = text_area.get("1.0",tk.END).strip()
    if text:
        doc = text

    # 剔除空白字符 包括段落符号
    doc = re.sub(r'\s+', '', doc)

    # # 引号分词：引号、书名号、括号
    # preg = r'[“|（|《].*?[”|）|》]'
    # as_list = re.findall(preg, doc)
    # a = [s[1:-1] for s in as_list]
    # as_list = re.split(preg, doc)
    # # 拼接数组
    # a += as_list

    # 我们也可以直接使用标点符合进行分割，段落符号、句末分词、局内分词、连接分词
    preg = r'[。|！|，|、|；|：|——|……|\-（|）《》“|”]'
    aa = []
    ss = re.split(preg, doc)
    for s in ss:
        if s:
            aa.append(s)

    # 从左到右从
    AS = []
    for index, txt in enumerate(aa):
        max_len = len(txt)
        for i in range(max_len + 1):
            # 从短到长
            as_str = txt[i:]
            for ii in range(1, len(as_str) + 1):
                word = as_str[:ii]
                AS.append(word)

    # 词频统计
    JS = {}
    for word in AS:
        if word in JS:
            JS[word] += 1
        else:
            JS[word] = 1

    # 词频排序
    sorted_data = sorted(JS.items(), key=lambda x: x[1], reverse=True)

    # 显示结果
    print("\n".join([f"{word}: {count}" for word, count in sorted_data]))


root = tk.Tk()
root.title("根据语法统计分词")
root.geometry("400x300")

text_area = tk.Text(root, width=50, height=10)
text_area.pack(pady=10)

start_button = tk.Button(root, text="开始分词", command=words)
start_button.pack()

result_label = tk.Label(root, text="")
result_label.pack(pady=10)

root.mainloop()